/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.ejb.controlador;

import java.io.Serializable;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Named;
import com.ejb.negocio.AdministradorFacade;
import com.ejb.negocio.UsuariosFacade;
import com.ejb.persistencia.Administrador;
import com.ejb.persistencia.Usuarios;

/**
 *
 * @author MoisesAntonio
 */
@Named("login")
@SessionScoped
public class Login extends AbstractBean implements Serializable {

    @Inject Credenciales credenciales;
    
    @EJB
    private AdministradorFacade ejbAdmin;
    @EJB
    private UsuariosFacade ejbUser;
    
    private Usuarios user;
    private Administrador admin;
    
    /**
     * Método para realizar el login, por ahora es temporal, pues no tiene ninguna navegación.
     * Más adelante este método debe llevar al lugar correspondiente dependiendo de si es admin, user
     * o el login es incorrecto.
     */
    public void doLogin(){
        admin=ejbAdmin.login(credenciales.getUsername(),credenciales.getPassword());
        user=ejbUser.login(credenciales.getUsername(), credenciales.getPassword());
        if(admin!=null){
            credenciales.setAdmin(admin);
            credenciales.setTipo(TipoUsuario.administrador);
        }else{
            if(user!=null){
                credenciales.setUser(user);
                credenciales.setTipo(TipoUsuario.usuario);
            }
        }
    }
    
    public String logout() {

        admin = null;
        user = null;
        
        credenciales.setAdmin(null);
        credenciales.setUser(null);
        credenciales.setTipo(TipoUsuario.noLogueado);
        return "/index";

    }
    
    public boolean isLoggedIn() {

       return user!=null || admin!=null;

    }
    
    public boolean isLoggedInUser(){
        return user!=null;
    }
    
    public boolean isLoggedInAdmin(){
        return admin!=null;
    }
    
    public Usuarios getUsuario(){
        return user;
    }
    
    public Administrador getAdmin(){
        return admin;
    }
    
    @Produces @LoggedIn Usuarios getCurrentUser() {
        return user;
    }
    
    @Produces @LoggedIn Administrador getCurrentAdmin() {
        return admin;
    }
}
